네트워크

네트워크분석_03_네트워크 탐지 룰

작성자 : Heehyeon Yoo|2025-11-10
# 네트워크# 스노트# 수리카타# 네트워크 탐지 룰

1. 실습 환경 구축

  • OWASP-ZAP (Zed Attack Proxy): 공격자/진단자 역할. 브라우저와 웹 서버 간의 트래픽을 가로채고(프록시), 취약점을 자동/수동으로 스캔하는 도구.
  • MetasploitableV2: 공격 대상(Victim) 서버. 의도적으로 다양한 보안 취약점을 내포하도록 구축된 리눅스 가상 머신. (DVWA, bWAPP 등 포함)
  • Security Onion(16.04.x 버전): 침해 탐지 및 분석 시스템(IDS/SIEM). Snort(탐지 엔진), Snorby/Squert(경고 시각화), ELSA(로그 검색/분석) 등 다양한 오픈소스 보안 도구가 통합된 플랫폼

2. 웹 스캐너 주요 기능 실습

  • Update/Proxy Setting: 플러그인 및 스캔 정책을 최신화하고, 브라우저(Firefox, Chrome 등)의 트래픽이 ZAP을 거치도록 프록시 설정.
  • Port Scan/Spider: 대상 서버의 열린 포트 정보를 스캔하고, 웹사이트를 크롤링하여 사이트 구조(사이트맵)를 파악.
  • Forced Browsing: robots.txt나 Spider에서 발견되지 않는 숨겨진 디렉터리나 파일(e.g., /admin, /backup)을 사전 파일 기반으로 강제 탐색.
  • Break: HTTP/HTTPS 요청(Request)과 응답(Response)을 전송 직전에 가로채서(Intercept) 헤더나 파라미터 값을 실시간으로 변조.
  • Active Scan: 식별된 페이지와 파라미터를 대상으로 자동화된 공격 페이로드(SQLi, XSS 등)를 전송하여 능동적으로 취약점을 스캔.
  • Scan Policy Manager: Active Scan 시 사용할 공격 유형(e.g., SQL Injection, XSS)과 스캔 강도(Low, Medium, High)를 조절하여 스캔 시간과 서버 부하를 관리.
  • Encode/Decode/Hash: 전송 값을 Base64, URL, Hex 등으로 인코딩/디코딩하거나 MD5, SHA1 등으로 해시값을 생성. (우회 공격 시 유용)
  • Report: 스캔 결과를 바탕으로 탐지된 취약점 목록, 위험도, 상세 내용을 포함하는 HTML, JSON, XML 형식의 보고서 생성.

3. 취약점 진단 및 패턴 분석 실습

  • 사이트맵 획득: ZAP의 Spider 기능을 이용해 DVWA의 전체 페이지 구조 파악.
  • 취약점 진단: Active Scan을 수행하여 Path Traversal, SQL 인젝션, XSS 등 6가지 주요 취약점 진단.
  • 로그 획득: 피해자 서버(MetasploitableV2)의 웹 서버 로그(e.g., /var/log/apache2/access.log)에 접근하여 FTP 등을 이용해 분석 시스템으로 다운로드.
  • 로그 분석 (Notepad++): 로그 파일을 열어 ZAP Active Scan 시도가 서버에 어떤 HTTP 요청(공격 패턴)으로 기록되었는지 확인. (e.g., GET /dvwa/vulnerabilities/sqli/?id=' OR '1'='1' HTTP/1.1)
  • 교차 검증: ZAP의 스캔 결과(탐지된 취약점)와 서버 로그에 남은 실제 공격 흔적(패턴)을 비교 분석.
  • 결과 보고서 추출: ZAP의 Report 기능을 사용해 분석된 취약점 현황을 공식 보고서 형태로 추출.

4. 분석 도구

  • Snorby: Snort가 탐지한 경고(Alert)를 실시간으로 보여주는 웹 기반 대시보드. 이벤트의 심각도, 발생 시각, 출발지/목적지 IP 등을 직관적으로 모니터링.
  • Squert: Snorby와 유사한 시각화 도구. 특히 이벤트 간의 연관 관계나 시계열(Timeline) 분석에 초점을 맞춘 인터페이스 제공.
  • ELSA (Enterprise Log Search and Archive): 대규모 로그(Syslog, Snort 로그, 웹 로그 등)를 수집, 정규화, 저장, 검색하는 로그 관리 및 분석(SIEM) 도구. (16.04 버전의 핵심)

5. 스노트 소개와 규칙 구조 이해

  • 스노트 소개: 실시간 트래픽 분석 및 패킷 로깅이 가능한 오픈소스 네트워크 침입 탐지 시스템(NIDS).
  • 규칙 구조: Rule Header (규칙 헤더) + Rule Option (규칙 옵션)
    • 규칙 헤더: 트래픽을 식별하는 기본 조건.
      • [Action] [Protocol] [Src IP] [Src Port] [Direction] [Dst IP] [Dst Port]
      • (예: alert tcp $HOME_NET any -> $EXTERNAL_NET 80)
    • 규칙 옵션: 패킷의 페이로드(내용)를 검사하는 세부 조건. ( ) 안에 ;로 구분하여 작성.
      • msg:"경고 메시지";
      • content:"탐지할 문자열";
      • pcre:"/정규표현식/옵션";
      • sid:[규칙 ID];
      • rev:[규칙 버전];

6. 정규표현식(PCRE) 이해

  • Snort의 content 옵션으로 탐지하기 어려운 복잡하거나 변형된(인코딩 등) 공격 패턴을 탐지하기 위해 사용하는 문법. pcre 옵션에서 사용.
    • 메타문자: . (임의의 한 글자), ^ (문자열 시작), $ (문자열 끝), | (OR), [] (문자 집합), () (그룹화).
    • 수량자: (0회 이상), + (1회 이상), ? (0 또는 1회), {n,m} (n회 이상 m회 이하).
    • 클래스: \d (숫자), \w (알파벳/숫자/언더스코어), \s (공백 문자).
    • 추가 옵션 (PCRE 옵션): i (대소문자 무시), m (다중 라인 모드).
    • 탐욕적(Greedy) vs. 게으른(Lazy) 수량자:
      • 탐욕적 (기본): .* (매칭 가능한 가장 긴 문자열). A...B가 있을 때 A마지막 B까지 매칭.
      • 게으른: .*? (수량자 뒤에 ? 추가. 매칭 가능한 가장 짧은 문자열). A...B...B가 있을 때 A첫 번째 B까지 매칭.

7. Path Traversal(디렉터리 탐색)

  • 패턴: ../ (상위 디렉터리 이동) 문자열을 이용해 비인가된 파일( /etc/passwd)에 접근 시도.
  • 우회 패턴: URL 인코딩 (..%2f 또는 ..%5c), 이중 인코딩 (..%252f).
  • 스노트 분석/규칙:
    • content:"../"; (가장 기본적인 탐지)
    • pcre:"/\.\.%2[Ff]/i"; (URL 인코딩 / 탐지)
    • pcre:"/\.\.%5[Cc]/i"; (URL 인코딩 \ 탐지)
    • http_uri; 옵션을 추가하여 URI 영역에서만 검사하도록 한정.

8. SQL Injection

  • 사용자의 입력값이 SQL 쿼리문의 일부로 사용되는 점을 악용.
    • 인증 우회: ' OR '1'='1'--
    • 데이터 탈취: UNION SELECT, information_schema
    • 인코딩: 공백(%20 또는 +), 작은따옴표(%27)
  • 스노트 분석:
    • pcre:"/('|\x27).*(OR|--|#|;)/i"; (따옴표와 함께 주석/OR 구문 탐지)
    • pcre:/UNION\s+SELECT/i; (UNION SELECT 구문 탐지. \s+는 하나 이상의 공백 의미)

9. Directory Browsing

  • 공격이 아닌 서버 설정 오류로, 웹 서버가 인덱스 파일(index.html)이 없는 디렉터리의 파일 목록을 노출하는 현상.
  • 탐지 (서버 응답): 공격자의 요청이 아닌, 서버의 응답 패킷에 포함된 특정 문자열을 탐지.
    • "Index of /"
    • "Parent Directory"
  • 스노트 분석/규칙: 방향성이 중요. (서버 -> 클라이언트)
    • alert tcp $EXTERNAL_NET 80 -> $HOME_NET any (msg:"Directory Browsing"; flow:to_client,established; content:"Index of /"; ...)

10. Remote OS Command Injection

  • 웹 파라미터를 통해 OS 셸 명령어를 주입. 셸 메타 문자 사용.
  • 주요 메타 문자:
    • ; (앞 명령어 종료 후 뒷 명령어 실행)
    • |, || (파이프라인, OR 조건)
    • &, && (백그라운드 실행, AND 조건)
    • command 또는 $(command) (명령어 실행 결과 치환)
  • 스노트 분석/규칙:
    • http_uri; 옵션으로 URI 영역을 검사.
    • pcre:"/[;\|&$()]/";` (URI 내에 셸 메타 문자가 포함되어 있는지 검사)

11. Cross Site Scripting

  • 공격자가 삽입한 악성 스크립트(JavaScript)가 다른 사용자(피해자)의 브라우저에서 실행됨.
    • 기본: <script>alert(1)</script>
    • 우회 (이벤트 핸들러): <img src=x onerror=alert(1)>, <svg onload=alert(1)>
    • 인코딩: %3cscript%3e ( <script> )
  • 스노트 분석/규칙:
    • pcre:"/<script/i"; (단순 <script 태그 탐지)
    • pcre:"/on(error|load|click|mouseover)\s*=/i"; (다양한 이벤트 핸들러 탐지)
    • pcre:"/%3[Cc]script/i"; (URL 인코딩된 <script 탐지)

12. Remote Code Execution - Shellshock

  • CVE-2014-6271
  • GNU Bash 셸에서 발견된 취약점. 특정 형식의 문자열이 환경 변수에 할당될 때, 변수 정의부 뒤에 오는 악성 코드가 의도치 않게 실행되는 원격 코드 실행(RCE) 취약점.
  • 패턴: 주로 HTTP 요청 헤더(User-Agent, Cookie, Referer 등) 영역에 () { :; }; 라는 특정 문자열과 함께 실행할 명령어를 삽입.
    • User-Agent: () { :; }; /bin/cat /etc/passwd
  • 스노트 분석:
    • http_header; 옵션을 사용해 HTTP 헤더 영역 검사.
    • content:"() { :; };"; (Shellshock 고유의 핵심 문자열 패턴 탐지)
    • pcre:"/\(\)\s*\{[^\}]*\};\s*\w+/"; (공백 등 변형을 고려한 정규표현식 탐지)